#include "contentdealer.h"
#include <QBuffer>
#include <QImage>

QByteArray ContentDealer::JsonPack(const Message& message)
{
    // Message类型的序列起始为0
    QByteArray content;
    content.append('0');
    QJsonObject jsonObj = message.PackJsonData();
    content.append(JsonToByte(jsonObj));
    return content;
}
QByteArray ContentDealer::ImagePack(const QImage& image)
{
    // QImage类型的序列起始为1
    QByteArray content;
    content.append('1');
    QByteArray byteArray;
    QBuffer buffer(&byteArray);
    buffer.open(QIODevice::WriteOnly);
    image.save(&buffer, "BMP"); // 将 QImage 转为 BMP 格式的 QByteArray
    buffer.close();
    content.append(byteArray);
    return content;
}


QByteArray ContentDealer::JsonToByte(const QJsonObject& jsonObj)
{
    QJsonDocument doc(jsonObj);
    return doc.toJson();
}

ContentType ContentDealer::Unpack(const QByteArray& originContent, QByteArray& unpackedContent)
{
    // 通过参数返回可以直接解析的二进制序列
    unpackedContent = originContent.mid(1);
    // 检查content类型（图片还是消息）
    char type = originContent[0];
    if (type == '0')
    {
        return ContentType::MESSAGE;
    }
    else if (type == '1')
    {
        return ContentType::IMAGE;
    }
    return ContentType::OTHER;
}


MessageType ContentDealer::GetMessageType(const QByteArray& jsonByteArray, QJsonObject& jsonObj)
{
    jsonObj = ByteToJson(jsonByteArray);
    // 处理莫名混进来的包
    if (!jsonObj.contains(JsonKey::TYPE))
    {
        return MessageType::Unknown;
    }
    // 这里写一段switch转换为message对应子类
    return static_cast<MessageType>(jsonObj[JsonKey::TYPE].toInt());
}


QJsonObject ContentDealer::ByteToJson(const QByteArray& jsonByteArray)
{
    QJsonDocument doc = QJsonDocument::fromJson(jsonByteArray);
    if (doc.isNull())
    {
        return QJsonObject();
    }
    // 检查是否是JSON对象
    if (!doc.isObject())
    {
        return QJsonObject();
    }
    QJsonObject jsonObj = doc.object();
    return jsonObj;
}




